PHLEGM v6 NES Lightweight VBlank Latch Fix - 2026-10-02

Purpose
- Remove the performance regression introduced by copying PPU frame state during every NES vblank.
- Preserve Donkey Kong's pre-NMI display state so the host does not sample a temporarily blanked PPUMASK and show a gray frame.

Behavior
- NativePpuLatchCompletedFrame is O(1): it latches PPUCTRL, PPUMASK, scroll X/Y, and mirroring mode only.
- No 4 KiB nametable, palette, OAM, or CHR snapshot loop runs at vblank.
- Host rendering reads live PPU VRAM/palette/OAM and side-effect-free CHR backing while honoring the latched pre-NMI control state.
- Host rendering never consumes FRY transactions.
- Existing asynchronous GUI presentation, FPS overlay, machine/media/control fixes, and FRY declaration compile fix remain intact.

Validation
- validate_nes_frame_latch.py verifies vblank ordering, O(1) latch behavior, side-effect-free host CHR reads, and deferred dirty-frame rasterization.
- All PHLEGM v6 static regression validators pass in the packaging environment.
- Native Windows runtime speed must still be measured in the user's FBC build environment.
